package br.com.sgmf.dao;

import br.com.sgmf.model.Funcionario;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.util.List;

@Repository
public class FuncionarioDAO {

    @PersistenceContext
    private EntityManager manager;

    @Transactional
    public void save(Funcionario funcionario) {
        manager.persist(funcionario);
    }

    @Transactional
    public void update(Funcionario funcionario) {
        manager.merge(funcionario);
    }

    @Transactional
    public void delete(Funcionario funcionario) {
        manager.remove(funcionario);
    }

    public Funcionario findById(Integer id) {
        return manager.find(Funcionario.class, id);
    }

    @SuppressWarnings("unchecked")
    public List<Funcionario> findByNome(String nome) {
        Session session = manager.unwrap(Session.class);
        Criteria criteria = session.createCriteria(Funcionario.class);
        return criteria.add(Restrictions.like("nome", nome, MatchMode.START))
                .list();
    }

    @SuppressWarnings("unchecked")
    public List<Funcionario> findAll() {
        return manager.createQuery("SELECT f FROM Funcionario f")
                .getResultList();
    }

}
